// testcasemanager.cpp
#include "testcasemanager.h"
#include <QDebug>

TestCaseManager::TestCaseManager(QObject *parent) : QObject(parent) {
    // 加载配置数据和测试案例
    loadConfigData();
    loadTestCases();
}

QList<TestDataModel::TestCase> TestCaseManager::getTestCases() const {
    return m_testCases;
}

void TestCaseManager::setTestCases(const QList<TestDataModel::TestCase>& testCases) {
    m_testCases = testCases;
}

QList<TestDataModel::ConfigItem> TestCaseManager::getConfigData() const {
    return m_configData;
}

bool TestCaseManager::addTestCase(const TestDataModel::TestCase& testCase) {
    m_testCases.append(testCase);
    return saveTestCases();
}

bool TestCaseManager::removeTestCases(const QList<int>& indices) {
    // 按降序删除，避免索引移位问题
    QList<int> sortedIndices = indices;
    std::sort(sortedIndices.begin(), sortedIndices.end(), std::greater<int>());

    for (int index : sortedIndices) {
        if (index >= 0 && index < m_testCases.size()) {
            m_testCases.removeAt(index);
        }
    }

    return saveTestCases();
}

bool TestCaseManager::updateTestCase(int index, const TestDataModel::TestCase& testCase) {
    if (index < 0 || index >= m_testCases.size()) {
        return false;
    }

    m_testCases[index] = testCase;
    return saveTestCases();
}

bool TestCaseManager::saveTestCases(const QList<TestDataModel::TestCase>& testCases)  {
    QList<TestDataModel::TestCase> casesToSave = testCases.isEmpty() ? m_testCases : testCases;
    QDomDocument doc;
    QDomElement root = doc.createElement("TestCases");
    doc.appendChild(root);

    for (const auto& caseItem : testCases) {
        QDomElement caseElem = doc.createElement("TestCase");
        caseElem.setAttribute("name", caseItem.name);
        root.appendChild(caseElem);

        // 新增：保存多组数据
        QDomElement groupsElem = doc.createElement("TestGroups");
        caseElem.appendChild(groupsElem);

        for (const auto& group : caseItem.testGroups) {
            QDomElement groupElem = doc.createElement("TestGroup");
            groupsElem.appendChild(groupElem);

            // 保存当前组的输入数据
            QDomElement inputElem = doc.createElement("InputDataList");
            for (const auto& input : group.inputData) {
                inputElem.appendChild(input.toDomElement(doc));
            }
            groupElem.appendChild(inputElem);

            // 保存当前组的预期数据
            QDomElement expectedElem = doc.createElement("ExpectedDataList");
            for (const auto& expected : group.expectedData) {

                expectedElem.appendChild(expected.toDomElement(doc));
            }
            groupElem.appendChild(expectedElem);
        }
    }
    return XmlParser::saveTestCases(TESTCASES_FILE_PATH, m_testCases);
}

bool TestCaseManager::loadTestCases() {
    // 关键修改：直接调用 XmlParser::loadTestCases，无需手动加载文档
    QList<TestDataModel::TestCase> testCases = XmlParser::loadTestCases(TESTCASES_FILE_PATH);

    if (testCases.isEmpty()) {
        qWarning() << "加载测试案例失败：文件不存在或解析无数据";
        return false;
    }

    // 赋值给成员变量缓存
    m_testCases = testCases;
    qInfo() << "加载测试案例成功，共" << testCases.size() << "个案例";
    return true;
}

bool TestCaseManager::loadConfigData() {
    m_configData = XmlParser::parseConfigFile(CONFIG_FILE_PATH);
    return !m_configData.isEmpty();
}
